home *** CD-ROM | disk | FTP | other *** search
/ MacAddict 116 / MacAddict 116 (Mac Power Pack)(theDISC)(April 2006).iso / Software / Utilities / macscan_installer.dmg / MacScan Installer.pkg / Contents / Resources / InstallationCheck < prev    next >
Encoding:
Text File  |  2005-10-14  |  2.9 KB  |  155 lines

  1. #!/usr/bin/perl
  2.  
  3.  
  4. my $SYSTEM_VERS     = "/System/Library/CoreServices/SystemVersion.plist";
  5. my $EXIT_VALUE         = 0;
  6.  
  7. DO_CHECKS: 
  8. {
  9.         # Really old installers need the generic error message.
  10.     if(CheckVersion("$SYSTEM_VERS", "10.1", "ProductVersion", "<")) {
  11.         $EXIT_VALUE = 1;
  12.         last;
  13.     }
  14.  
  15.         # 10.2.0 or better, please.
  16.     if(CheckVersion("$SYSTEM_VERS", "10.2.0", "ProductVersion", "<")) {
  17.         $EXIT_VALUE = (( 1 << 6 ) | ( 1 << 5 ) | 16);
  18.         last;
  19.     }
  20.  
  21. }
  22.  
  23. exit($EXIT_VALUE);
  24.  
  25.  
  26. ########################################################
  27. ########################################################
  28.  
  29. sub CheckVersion
  30. {
  31.     my $path            = $_[0];
  32.     my $version         = $_[1];
  33.     my $keyName         = $_[2];
  34.     my $operator        = $_[3];
  35.     
  36.     my $oldSeperator;
  37.     my $plistData;
  38.     my @items;
  39.     my $item;
  40.     my $versiondata;
  41.     my $i;
  42.     my @theVersionArray;
  43.     my %versiondata;
  44.     my @versionArray;
  45.  
  46.     # if there's no THERE there, we return FALSE
  47.     if (! -e $path) {
  48.         return 0;
  49.     }
  50.  
  51.     if (!$operator) {
  52.         $operator = "==";
  53.     }
  54.  
  55.     $oldSeperator = $/;
  56.     $/ = \0;
  57.  
  58.     open( PLIST, "$path") || do {
  59.         return 0;
  60.     };
  61.  
  62.     $plistData = <PLIST>;
  63.     $plistData =~ /<dict>(.*?)<\/dict>/gis;
  64.  
  65.     @items = split(/<key>/, $plistData);
  66.  
  67.     shift @items;
  68.     foreach $item (@items) {
  69.         $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
  70.         $versiondata{ $1 } = $2;
  71.     }
  72.  
  73.     close(PLIST);
  74.  
  75.     $/ = $oldSeperator;
  76.  
  77.     @theVersionArray = split(/\./, $versiondata{$keyName});
  78.     for ($i = 0; $i < 3; $i++) {
  79.         if(!$theVersionArray[$i]) {
  80.             $theVersionArray[$i] = '0';
  81.         }
  82.     }
  83.  
  84.     @versionArray = split(/\./, $version);
  85.     
  86.     my $actualVersion;
  87.  
  88.     for ($i = 0; $i < 3; $i++) {
  89.         if (($theVersionArray[$i] != $versionArray[$i]) or ($i == 2)) {
  90.  
  91.             $actualVersion = $theVersionArray[$i];
  92.             $version = $versionArray[$i];
  93.  
  94.             last;
  95.         }
  96.     }
  97.  
  98.     my $expression = '$actualVersion ' . $operator . ' $version';
  99.     if( eval ($expression) )
  100.     {
  101.         return 1;
  102.     }
  103.     else
  104.     {
  105.         return 0;
  106.     }
  107.  
  108. }
  109.  
  110. ########################################################
  111.  
  112. sub GetVersion
  113. {
  114.     my $path            = $_[0];
  115.     my $keyName         = $_[1];
  116.     
  117.     my $oldSeperator;
  118.     my $plistData;
  119.     my @items;
  120.     my $item;
  121.     my $versiondata;
  122.     my $i;
  123.     my @theVersionArray;
  124.     my %versiondata;
  125.     my @versionArray;
  126.  
  127.     # if there's no THERE there, we return FALSE
  128.     if (! -e $path) {
  129.         return 0;
  130.     }
  131.  
  132.     $oldSeperator = $/;
  133.     $/ = \0;
  134.  
  135.     open( PLIST, "$path");
  136.  
  137.     $plistData = <PLIST>;
  138.     $plistData =~ /<dict>(.*?)<\/dict>/gis;
  139.  
  140.     @items = split(/<key>/, $plistData);
  141.  
  142.     shift @items;
  143.     foreach $item (@items) {
  144.         $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
  145.         $versiondata{ $1 } = $2;
  146.     }
  147.  
  148.     close(PLIST);
  149.  
  150.     $/ = $oldSeperator;
  151.  
  152.     return($versiondata{$keyName});
  153. }
  154.  
  155.